﻿#define _CRT_SECURE_NO_WARN

//7 - 1 两个有序链表序列的交集
//分数 20
//作者 DS课程组
//单位 浙江大学
//已知两个非降序链表序列S1与S2，设计函数构造出S1与S2的交集新链表S3。
//
//输入格式 :
//输入分两行，分别在每行给出由若干个正整数构成的非降序序列，用−1表示序列的结尾（−1不属于这个序列）。数字用空格间隔。
//
//输出格式 :
//在一行中输出两个输入序列的交集序列，数字间用空格分开，结尾不能有多余空格；若新链表为空，输出NULL。
//
//输入样例 :
//1 2 5 - 1
//2 4 5 8 10 - 1
//输出样例 :
//	2 5


#include <iostream>
using namespace std;

#include <list>


int main()
{
    list<int> ls1;
    list<int> ls2;
    list<int> ls3;
    int a;
    while (true)
    {
        cin >> a;
        if (a == -1)
        {
            break;
        }
        ls1.push_back(a);
    }
    while (true)
    {
        cin >> a;
        if (a == -1)
        {
            break;
        }
        ls2.push_back(a);
    }
    auto it1 = ls1.begin();
    auto it2 = ls2.begin();
    while (it1 != ls1.end() && it2 != ls2.end())
    {
        if (*it1 == *it2)
        {
            ls3.push_back(*it1);
            ++it1;
            ++it2;
        }
        else if (*it1 < *it2)
        {
            ++it1;
        }
        else
        {
            ++it2;
        }
    }
    if (ls3.empty())
    {
        cout << "NULL";
    }
    else {
        auto it = ls3.begin();
        cout << *it;  // 输出第一个元素（无空格）
        ++it;
        for (; it != ls3.end(); ++it) {
            cout << " " << *it;  // 后续元素前加空格
        }
    }
    return 0;
}INGS 1